Ext.onReady(function() {
    Ext.QuickTips.init();
    Ext.form.Field.prototype.msgTarget = 'side';
    Ext.BLANK_IMAGE_URL = '../ext-3.3.0/resources/images/default/s.gif'

    linkPassword = new Ext.form.Label({
        id: 'linkPassword',
        name: 'linkPassword',
        html: '<a href="#" onclick="fnRecoveryPassword();">¿Olvidaste tu contraseña?</a>'
    });

    usuario = new Ext.form.TextField({
        name: 'usuario',
        fieldLabel: 'Usuario',
        allowBlank: false,
        maxLength: 20,
        minLength: 6,
        //value: 'hhormazabal',
        listeners: {
            specialKey: function(field, el) {
                if (el.getKey() == Ext.EventObject.ENTER
                    || el.getKey() == Ext.EventObject.RETURN) {
                    password.focus(true, 10);
                }
            }
        }
    });

    password = new Ext.form.TextField({
        name: 'password',
        fieldLabel: 'Password',
        allowBlank: false,
        maxLength: 12,
        minLength: 6,
        inputType: 'password',
        //value: '123456a',
        listeners: {
            specialKey: function(field, el) {
                if (el.getKey() == Ext.EventObject.ENTER
                    || el.getKey() == Ext.EventObject.RETURN) {
                    boton.focus(true, 10);
                }
            }
        }
    });

    boton = new Ext.Button({
        name: 'btnLogin',
        text: 'Conectar',
        iconCls: 'btnDesconectar',
        formBind: true,
        handler: function() {
            boton.setIconClass('btnConectar');
            fncValidarUsuario();
        }
    });

    Formulario = new Ext.FormPanel({
        id: 'frmLogin',
        name: 'frmLogin',
        labelWidth: 75, // label settings here cascade unless
        // overridden
        frame: true,
        title: '',
        bodyStyle: 'padding:5px 5px 0',
        width: 400,
        monitorValid: true,
        defaults: {
            width: 230
        },
        items: [usuario, password, linkPassword],
        buttons: [boton],
        buttonAlign: 'right'
    });

    // Formulario.render(document.body);
    usuario.tabIndex = 1
    password.tabIndex = 2
    boton.tabIndex = 3

    Ventana = new Ext.Window({
        layout: 'fit',
        title: 'Acceso al sistema',
        iconCls: 'winLogin',
        width: 370,
        height: 150,
        pageX: 450,
        pageY: 150,
        closeAction: 'hide',
        plain: true,
        closable: false,
        modal: true,
        resizable: false,
        draggable: false,
        items: [Formulario]
    });
        
    Ventana.show();
    Ventana.center();

    window.onresize = function() {
        Ventana.center();
    };

    usuario.focus(true, 1000);
});

function fncValidarUsuario() {
    Ext.Ajax.timeout = 90000000;
    Ext.MessageBox.wait('Autenticando usuario, por favor espere...');
    Ext.Ajax.request({
        url : 'LoginAjax.aspx',
        params : {
            accion : 'ValidarUsuario',
            usuario : usuario.getValue(),
            password : hex_md5(password.getValue())
        },
        method : 'POST',
        callback : function(options, success, response) {
            Ext.MessageBox.updateProgress(1);
            if (!success) {
                Ext.MessageBox.hide();
                Ext.MessageBox.show({
                    title : 'ERROR',
                    msg : 'Ocurrio un problema al autenticar su usuario',
                    buttons : Ext.Msg.OK,
                    icon : Ext.MessageBox.ERROR
                });
                return false;
            }
        },
        success : function(action) {
            obj = Ext.util.JSON.decode(action.responseText);
            Ext.MessageBox.hide();
            if (obj.success) {
                if (obj.errors.id == 0){
                    switch (obj.created[0].NUM_ERROR){
                        case 0:
                            window.location = 'AppFront/default.aspx';
                            break;
                        case 1:
                            Ext.MessageBox.show({
                                title : 'Error de incio de sesión',
                                msg : obj.created[0].GLS_ERROR,
                                buttons : Ext.Msg.OK,
                                icon : Ext.MessageBox.ERROR,
                                fn : function() {
                                    password.setValue('');
                                    usuario.focus(true, 10);
                                }
                            });
                            break;
                        case 2:
                            Ext.MessageBox.show({
                                title : 'Error de incio de sesión',
                                msg : obj.created[0].GLS_ERROR,
                                buttons : Ext.Msg.OK,
                                icon : Ext.MessageBox.ERROR,
                                fn : function() {
                                    password.setValue('');
                                    usuario.focus(true, 10);
                                }
                            });
                            break;
                        case 3:
                            Ext.MessageBox.show({
                                title : 'Error de incio de sesión',
                                msg : obj.created[0].GLS_ERROR,
                                buttons : Ext.Msg.OK,
                                icon : Ext.MessageBox.ERROR,
                                fn : function() {
                                    password.setValue('');
                                    usuario.focus(true, 10);
                                }
                            });
                            break;
                        case 4:
                            Ext.MessageBox.show({
                                title : 'Error de incio de sesión',
                                msg : obj.created[0].GLS_ERROR,
                                buttons : Ext.Msg.OK,
                                icon : Ext.MessageBox.ERROR,
                                fn : function() {
                                    password.setValue('');
                                    password.focus(true, 10);
                                }
                            });
                            break;
                    }
                }
            }
            else {
                Ext.MessageBox.show({
                    title : 'ERROR',
                    msg : obj.errors.desc,
                    buttons : Ext.Msg.OK,
                    icon : Ext.MessageBox.ERROR,
                    fn : function() {
                        boton.setIconClass('btnDesconectar');
                        boton.focus(true, 10);
                    }
                });

            }
        },
        failure : function(resp, opt) {
            Ext.MessageBox.hide();
            Ext.MessageBox.show({
                title : 'ERROR',
                msg : 'No se pudo establecer comunicacion con el servidor.',
                buttons : Ext.Msg.OK,
                icon : Ext.MessageBox.ERROR
            });
            boton.setIconClass('btnDesconectar');
            Formulario.getForm().reset();
        }
    });
}

function fnRecoveryPassword() {
    if (usuario.getValue() == '') {
        Ext.MessageBox.show({
            title : 'Información',
            msg : 'Para poder restablecer su contraseña, debe ingresar su nombre de usuario.',
            buttons : Ext.Msg.OK,
            icon : Ext.MessageBox.WARNING,
            fn : function() {
                usuario.focus(true, 1000);
            }
        });
    } else {
        Ext.MessageBox.show({
            title : 'Confirmación',
            msg : '¿Esta seguro de restablecer su contraseña?',
            buttons : Ext.Msg.YESNO,
            icon : Ext.MessageBox.QUESTION,
            fn : function(btn) {
                if (btn == 'yes') {
                    Ext.Ajax.timeout = 90000000;
                    Ext.MessageBox.wait('Restableciendo contraseña, por favor espere...');
                    Ext.Ajax.request({
                        url : 'AppFront/Administracion/ConeccionesAJAX/AdministracionUsuariosAJAX.aspx',
                        params : {
                            accion : 'cambiarclave',
                            usuario : usuario.getValue()
                        },
                        method : 'POST',
                        success : function(action) {
                            obj = Ext.util.JSON.decode(action.responseText);
                            Ext.MessageBox.hide();
                            if (obj.success) {
                                if (obj.errors.id == 0){
                                    Ext.MessageBox.show({
                                        title : 'Restablecimiento de contraseña',
                                        msg : 'Su nueva contraseña a sido enviada a su correo electrónico',
                                        buttons : Ext.Msg.OK,
                                        icon : Ext.MessageBox.INFO,
                                        fn : function() {
                                            password.setValue('');
                                            password.focus(true, 10);
                                        }
                                    });
                                }
                                else{
                                    Ext.MessageBox.show({
                                        title : 'ERROR',
                                        msg : obj.created[0].GLS_ERROR,
                                        buttons : Ext.Msg.OK,
                                        icon : Ext.MessageBox.ERROR,
                                        fn : function() {
                                            usuario.focus(true, 10);
                                        }
                                    });
                                }
                            }
                            else{
                                Ext.MessageBox.show({
                                    title : 'Error restablecimiento contraseña',
                                    msg : obj.errors.desc,
                                    buttons : Ext.Msg.OK,
                                    icon : Ext.MessageBox.ERROR,
                                    fn : function() {
                                        usuario.focus(true, 10);
                                    }
                                });
                            }
                        },
                        failure : function(resp, opt) {
                            Ext.MessageBox.hide();
                            Ext.MessageBox.show({
                                title : 'ERROR',
                                msg : 'No se pudo establecer comunicacion con el servidor.',
                                buttons : Ext.Msg.OK,
                                icon : Ext.MessageBox.ERROR,
                                fn: function(){
                                    //Ext.getCmp('frmLogin').getForm().reset();
                                    usuario.focus(true, 10);
                                }
                            });
                        }
                    });
                }
            }
        });
    }
}